package org.bonorsoft.modules.mobile.service;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.bonorsoft.common.api.vo.Result;
import org.bonorsoft.modules.mobile.entity.MobileUser;
import redis.clients.jedis.params.Params;
import javax.servlet.http.HttpServletRequest;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;

public interface IMobileUserService extends IService<MobileUser> {
    public MobileUser getUserByName(String username);

    /**
     * 校验用户是否有效
     * @param mobileUser
     * @return
     */
    Result<JSONObject> checkUserIsEffective(MobileUser mobileUser);

    /**
     * 根据用户名设置部门ID
     * @param username
     * @param deptId
     */
    void updateUserDepart(String username,Long deptId);

    /**
     * 根据菜单id获取全部用户userid
     * @param menuId
     * @return
     */
    List<String> getAllMenuUser(Long menuId);

    /**
     * 根据角色id获取全部用户userid
     * @param roleId
     * @return
     */
    List<String> getAllRoleUser(Integer roleId);

    IPage<MobileUser> selectUser(Page<MobileUser> page, MobileUser mobileUser, Params params, HttpServletRequest request);

    /**
     * 根据角色id查询用户
     * @param page
     * @param mobileUser
     * @param req
     * @return
     */
    IPage<MobileUser> pageByConditions(Page<MobileUser> page, MobileUser mobileUser, HttpServletRequest req);

    /**
     * 查询部门是否存在用户
     * @param deptId
     * @return
     */
    int checkDeptExistUser(Long deptId);


    /**
     * 校验用户名称是否唯一
     *
     * @param username 登录名称
     * @return 结果
     */
    public String checkUserNameUnique(String username);

    /**
     * 校验手机号码是否唯一
     *
     * @param mobileUser 用户信息
     * @return 结果
     */
    public String checkPhoneUnique(MobileUser mobileUser);

    /**
     * 校验email是否唯一
     *
     * @param mobileUser 用户信息
     * @return 结果
     */
    public String checkEmailUnique(MobileUser mobileUser);

    /**
     * 插入一条记录（选择字段，策略插入）
     *
     * @param roleIds 实体对象
     */
    boolean save(MobileUser mobileUser, Integer[] roleIds);

    /**
     * 校验用户是否允许操作
     *
     * @param mobileUser 用户信息
     */
    void checkUserAllowed(MobileUser mobileUser);

    /**
     * 编辑用户信息
     * @param roleIds 用户信息
     * @return
     */
    boolean updateUser(MobileUser mobileUser, Integer[] roleIds);

    /**
     * 删除（根据ID 批量删除）
     *
     * @param idList 主键ID列表
     */
    boolean removeByIds(Collection<? extends Serializable> idList);

    /**
     * 修改密码
     *
     * @param mobileUser
     * @return
     */
    public Result<?> changePassword(MobileUser mobileUser);

    /**
     * 用户授权角色
     *
     * @param userId 用户ID
     * @param roleIds 角色组
     */
    void insertUserAuth(String userId, Integer[] roleIds);

    /**
     * 更新用戶，并且更新redis中的缓存信息
     * @param mobileUser
     * @return
     */
    boolean updateByUser(MobileUser mobileUser);

    /**
     * 根据手机号获取用户
     * @param phone
     * @return
     */
    MobileUser getUserByPhone(String phone);

    /**
     * 微信小程序，校验用户是否有效
     * @param mobileUser
     * @param phone
     * @return
     */
    Result<JSONObject> checkUserIsEffectiveWithWx(MobileUser mobileUser, String phone);
}
